using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// 控制一组按钮的颜色，确保只有一个按钮呈现蓝色，其余为白色。
/// 点击按钮后，该按钮变为蓝色，其他按钮变回白色。
/// </summary>
public class ButtonColorController : MonoBehaviour
{
    /// <summary>
    /// 需要管理颜色的按钮数组（在Inspector中赋值）。
    /// </summary>
    public Button[] buttons;

    /// <summary>
    /// 选中按钮的颜色（蓝色）。
    /// </summary>
    public Color blueColor = Color.blue;

    /// <summary>
    /// 默认按钮颜色（白色）。
    /// </summary>
    public Color whiteColor = Color.white;

    private void Start()
    {
        if (buttons == null || buttons.Length == 0)
        {
            Debug.LogWarning("ButtonColorController: 未分配按钮数组！");
            return;
        }

        // 初始化按钮颜色，第一个按钮设为蓝色，其余按钮设为白色
        for (int i = 0; i < buttons.Length; i++)
        {
            if (i == 0)
            {
                SetButtonColor(buttons[i], blueColor);
            }
            else
            {
                SetButtonColor(buttons[i], whiteColor);
            }

            // 由于Lambda表达式会捕获变量的引用，因此创建局部变量 index 避免闭包问题
            int index = i;

            // 绑定点击事件，每个按钮被点击时都会调用 OnButtonClick 方法
            buttons[i].onClick.AddListener(() => OnButtonClick(index));
        }
    }

    /// <summary>
    /// 按钮点击事件：将所有按钮设为白色，并将点击的按钮设为蓝色。
    /// </summary>
    /// <param name="buttonIndex">被点击的按钮索引</param>
    private void OnButtonClick(int buttonIndex)
    {
        // 先将所有按钮颜色重置为白色
        for (int i = 0; i < buttons.Length; i++)
        {
            SetButtonColor(buttons[i], whiteColor);
        }

        // 再将当前点击的按钮颜色设为蓝色
        SetButtonColor(buttons[buttonIndex], blueColor);
    }

    /// <summary>
    /// 设置按钮的颜色
    /// </summary>
    /// <param name="button">目标按钮</param>
    /// <param name="color">要设置的颜色</param>
    private void SetButtonColor(Button button, Color color)
    {
        // 通过 Image 组件更改按钮背景颜色
        button.GetComponent<Image>().color = color;
    }
}